﻿using System.Threading;
using System.Threading.Tasks;

namespace Onetube.Providers.Interfaces
{
    public interface IYoutubePlayListItemProvider
    {
        Task<Onetube.Entities.PlayListItemQuery.PlayListItemQueryResult> GetPlayListInfoAsync(string playListId, string maxResults, CancellationTokenSource cancelTask);

        Task<Onetube.Models.SearchVideo.SearchVideoResult> GetMyWatchHistoryAsync(string token, string maxResults, CancellationTokenSource cancelTask);

        Task<Onetube.Models.SearchVideo.SearchVideoResult> GetMyWatchHistoryNextPageAsync(string token, string maxResults, string nextPageToken, CancellationTokenSource cancelTask);

        Task<Onetube.Models.SearchVideo.SearchVideoResult> GetMyWatchLaterAsync(string token, string maxResults, CancellationTokenSource cancelTask);

        Task<Onetube.Models.SearchVideo.SearchVideoResult> GetMyWatchLaterNextPageAsync(string token, string maxResults, string nextPageToken, CancellationTokenSource cancelTask);

        Task<Onetube.Models.SearchVideo.SearchVideoResult> GetMyFavoritesAsync(string token, string maxResults, CancellationTokenSource cancelTask);

        Task<Onetube.Models.SearchVideo.SearchVideoResult> GetMyFavoritesNextPageAsync(string token, string maxResults, string nextPageToken, CancellationTokenSource cancelTask);
    
        Task<Onetube.Models.SearchVideo.SearchVideoResult> GetMyLikesAsync(string token, string maxResults, CancellationTokenSource cancelTask);

        Task<Onetube.Models.SearchVideo.SearchVideoResult> GetMyLikesNextPageAsync(string token, string maxResults, string nextPageToken, CancellationTokenSource cancelTask);

        Task<Onetube.Models.SearchVideo.SearchVideoResult> GetMyUploadsAsync(string token, string maxResults, CancellationTokenSource cancelTask);

        Task<Onetube.Models.SearchVideo.SearchVideoResult> GetMyUploadsNextPageAsync(string token, string maxResults, string nextPageToken, CancellationTokenSource cancelTask);

        Task<Onetube.Models.SearchVideo.SearchVideoResult> GetVideosFromPlayListAsync(string maxResults, string playlistId, CancellationTokenSource cancelTask);

        Task<Onetube.Models.SearchVideo.SearchVideoResult> GetVideosFromPlayListNextAsync(string maxResults, string playlistId, string nextPageToken, CancellationTokenSource cancelTask);

        Task<bool> SetLikeAsync(string token, string videoId, CancellationTokenSource cancelTask);

        Task<bool> SetDislikeAsync(string token, string videoId, CancellationTokenSource cancelTask);

        Task<bool> IsLikedAsync(string token, string videoId, CancellationTokenSource cancelTask);

        Task<bool> DeleteLikeAsync(string token, string videoId, CancellationTokenSource cancelTask);

        Task<bool> DeleteDislikeAsync(string token, string playListItemId, CancellationTokenSource cancelTask);

        Task<bool> IsDisLikedAsync(string token, string videoId, CancellationTokenSource cancelTask);

        Task<bool> InsertVideoToWatchLaterAsync(string token, string videoId, CancellationTokenSource cancelTask);
       
        Task<bool> InsertVideoToFavoritesAsync(string token, string videoId, CancellationTokenSource cancelTask);
    }
}